[UPDATE] AWS Elemental MediaLiveがMediaPackage v2 endpointをサポートしました!
はじめに
清水です。本エントリではブロードキャストグレードのライブ動画処理サービスであるAWS Elemental MediaLiveでMediaPackage v2 endpointをサポートしたアップデートについてお届けします。本エントリ執筆時点の2024/12/29の段階ではまだAWS What's Newへのポストはありませんが、AWS CLI CHANGELOGの 1.36.23 の更新内容でアップデートを確認できます。
- api-change:
medialive
: AWS Elemental MediaLive adds three new features: MediaPackage v2 endpoint support for live stream delivery, KLV metadata passthrough in CMAF Ingest output groups, and Metadata Name Modifier in CMAF Ingest output groups for customizing metadata track names in output streams.
他のアップデートについても気になるところですが、本エントリでは MediaPackage v2 endpoint support for live stream delivery のみを取り上げます。なおこちらのアップデートについては、非公式ながらアップデート確認に非常に役に立つAWS API Changesのサイトにて、2024/12/16付けのアップデートであったことが確認できます。
今回のアップデートで、MediaLive Channelの出力先destinationをMediaPakcage v2のChannel gropu name、Channel nameで指定することができるようになりました。MediaPackage v1ではChannel IDを用いることで同様のことが可能でしたが、MediaPakcage v2を使用する場合、従来まではIngest endpoint URLの値を指定する必要がありました。
本エントリでは、これまでのMediaLiveとMediaPackageの連携方法についてざっと振り返り、今回のアップデートの意義について確認してみます。また使用するにあたって抑えておきたい注意事項について確認し、実際にこのMediaPackage v2 endpointを指定したChannel Templateを作成してみました。
これまでのMediaLiveとMediaPakcageの連携を振り返る
まずは、これまでのMediaLiveとMediaPakcageの連携について振り返ってみます。MediaPackageはリリース当時からあるMediaPackage v1(Live v1とも表記されるものです。リリース時からあるもので、単にMediaPackageとも呼称されます。)と、2023年5月にリリースしたMediaPackage v2とにわかれますね。それぞれのMediaLiveとの連携方法を時系列でおさらいしてみましょう。
MediaPacakge v1とMediaLiveとの連携方法
MediaLiveならびにMediaPacakgeのリリース時(2017年末なので、もう7年前ですね)の連携方法について、当時のブログエントリ「【やってみた】AWS Elemental MediaLiveとAWS Elemental MediaPackageでライブ配信してみた #reinvent | DevelopersIO」を確認してみます。MediaPackage v1 ChannelのInput URLならびに認証情報(UsernameとPassword)を確認し、MediaLiveのHLS Output Group destination URLに指定する、というかたちをとっていました。
引用元: 【やってみた】AWS Elemental MediaLiveとAWS Elemental MediaPackageでライブ配信してみた #reinvent | DevelopersIO
MediaPackageの認証情報(User nameとPassword)はEC2 Systems Manager Parameter Storeに保管するかたちでしたね。(AWS Elemental MediaLiveがEC2 Systems Managerと連携していることを確認してパスワード情報をきちんと管理しよう | DevelopersIO)
その後、2019年3月のアップデート(「[アップデート] AWS Elemental MediaLiveとAWS Elemental MediaPackageの連携がこれまでよりも簡単になりました | DevelopersIO」)で、このMediaLiveから出力先となるMediaPackage v1 endpointの指定方法が簡略化されます。MediaLiveのOutput gropusにMediaPackageという種別が登場します。このMediaPackage Output groupsでは出力先となるMediaPackage v1のCahnnel IDをするだけでdestination設定が完了しました。認証情報が不要になるほか、MediaPackageのInput URLではなくChannel IDで指定できるため、より直感的な指定が可能になるアップデートでした。
引用元: [アップデート] AWS Elemental MediaLiveとAWS Elemental MediaPackageの連携がこれまでよりも簡単になりました | DevelopersIO
MediaPakcage v2とMediaLiveとのこれまでの連携方法
MediaLiveとMediaPakcage(現在でいうv1)との連携は、上記2019年3月のアップデートでChannel IDによる指定ができるようになり、簡略化されました。その後、2023年5月にMediaPackage v2がリリースされます。(「[速報] low-latency HLSにも対応したMediaPackage v2がリリースされました![NEW] | DevelopersIO」)
このときのMediaLiveとMediaPakcage v2の連携方法についても、当時のブログエントリから振り返ってみましょう。MediaPakcage v1のようにChannel IDを指定することは、この段階ではまだできませんでした。そのため、MediaPackage v1リリース時のようにMediaLive側ではOutput group typeとしてMediaPakcageではなくHLSを指定、MediaPackage v2 ChanenlのIngest endpointを確認してMediaLive側のdestination URLに値を指定する、という方法で設定する必要がありました。
引用元: [速報] low-latency HLSにも対応したMediaPackage v2がリリースされました![NEW] | DevelopersIO
認証情報、UsernameとPasswordの入力がなくなっているのは、v1よりも進歩している点といえますね。こちらはMediaPackage v2で強化されたセキュリティ機能である、Channel policyによって制御されている認識です。(AWS Elemental MediaPackage v2のふたつのPolicyについて確認してみた | DevelopersIO))また、MediaPackage v2ではIngest URLにChannel group nameとChannel nameが含まれているため、MediaPackage v1よりも多少は認識性が高くなりました。
2024年6月にはMediaLiveとMediaPakcage v2の連携がこれまでのHLSに加えてCMAFでも可能になります。(MediaLiveとMediaPackageをCMAF Ingestで連携させてみた! | DevelopersIO)MediaLiveのOutput gropusではCMAF Ingestという種別を指定するかたちになりましたが、この段階でもMediaPakcage v2の指定についてはIngest endpoint URLの値をdestinationに入力する必要がありました。
引用元: MediaLiveとMediaPackageをCMAF Ingestで連携させてみた! | DevelopersIO
以上が、今回のアップデート前までのMediaPackage v2とMediaLiveの連携方法になります。今回のアップデートでは、MediaPackage v1と同じように、MediaPackage v2でもChannel group nameとChannel nameを用いるかたちでMediaLiveのdestinationとして指定ができるようになり、連携が簡略化されました。以降、実際にマネジメントコンソールからこのようすを確認してみます。
簡略化されたMediaPackage v2とMediaLiveとの連携についてマネジメントコンソールで確認する
MediaLiveのマネジメントコンソールから、簡略化されたMediaPakcage v2との連携部分について実際に確認してみます。
MediaLiveのマネジメントコンソールで[Create channel]ボタンから進み、Output groupsの[Add]ボタンを押下します。
Add output groupのoutput gropu type選択画面です。こちらは以前と特に変更点はないようですね。(新たにMediaPakcage v2という種別が現れるのかな、と予想していたのですが、違うようです。)MediaPackage
を選択して[Confirm]ボタンを押下してみましょう。
MediaPakcage Output groupの設定画面に進みます。冒頭に表示されるMediaPackage destination、これまでは単純にMediaPackage v1のChannel IDを選択するかたちでした。新たにOutputとして、CMAF Ingestを使うかHLSを使うかの選択ができるようになっていますね。
記載されているとおり、CMAF Ingest ouptputを選択した場合(User CMAF Ingest output
)は出力先がMediaPackage v2 Channelとなります。HLS outputを選択した場合(Use HLS ouptput
)の出力先はMediaPackage v1 Channelです。(仕様上、MediaPackage v2のChannelにもHLS outputでの連携は可能ですが、選択できるMediaPackage channel IDにMediaPakcage v2のリソースは表示されませんでした。)
今回はアップデート内容のMediaPakcage v2連携を確認したいので、User CMAF Ingest oputput
を選択して進めます。続くMediaPackage channel group nameでchannel groupを選択します。するとMediaPackage channel nameの選択箇所が現れますので、ここで使用するChannel nameを選択するというかたちです。
なお、MediaPakcage v2 ChannelでもInput typeがHLSのものは選択ができませんでした。(スクリーンショット中、グレーアウトしているChannelがHLS Input typeのものです。選択しようとするとYou can only select CMAF Ingest channels from a MediaPackage V2 channel group.
と怒られてしまいます。)
マネジメントコンソールからではなくAWS CLIなどAPIからであれば、HLS Input typeのChannelも指定できるのかな、とも思いましたが、aws medialive create-channel
コマンドのリファレンスにはChannelGroup、ChannelNameの指定はCMAF Ingestのみ使用できると記載があります。MediaPackage v2利用の際は(実際に)CMAF Ingest使用という制限がある、という認識でよいかと思います。
ChannelGroup -> (string)
Name of the channel group in MediaPackageV2. Only use if you are sending CMAF Ingest output to a CMAF ingest endpoint on a MediaPackage channel that uses MediaPackage v2.
ChannelName -> (string)
Name of the channel in MediaPackageV2. Only use if you are sending CMAF Ingest output to a CMAF ingest endpoint on a MediaPackage channel that uses MediaPackage v2.
引用元: create-channel — AWS CLI 2.22.26 Command Reference
MediaPacakge v2のChannel nameを選択してMediaPakcage destination自体の設定は完了となります。しかしCMAF Ingest output使用においては注意事項があります。次章でこの注意事項について確認していきます。
MediaPackage Output group typeでCMAF Ingestを利用する際の注意点
Output groupsでMediaPackageを選択することにより、これまでのMediaPacakge v1のリソースに加えてMediaPakcage v2のリソースも選択できるようになりました。ですが、Output groupsにMediaPakcage v2 Channelを指定した場合、内部的にはあくまでCMAF Ingestでの出力になる点に注意しましょう。これまでMediaPakcage v1 Channelで使用していたHLSと異なり、CMAF Ingest output groupでは1つのOutputにはVideo、Audio、Captionのいずれか1つのみしか含めることができない、という制限があります。
この点を実際にマネジメントコンソールの操作で確認してみましょう。Create channel画面のChannel templateでLive event - MediaPackage
を選択します。
続いてChannel nameやIAM role、Channel classやInputなどを設定します。Output groupsについては、Channel templateで選択したMediaPackage用のものが選択されていますね。あとは出力先となるMediaPackage Channelを選ぶだけです。MediaPacakge destinationでMediaPackage v2が対象となるUse CMAF Ingest output
を選択、適切なChannel groupならびにChannelを選択して、[Create channel]してみましょう。
Channelは作成されずValidation Errorとなってしまいました。
以下が実際のValidation Errorの内容です。いずれも、1つのOutputには1つのVideo or Audio or Captionしか含めることができない、という制限に該当しているということとなりますね。
Validation Errors
outputGroups[0].outputs[0]
For MediaPackage endpoints using CMAF, outputs can only contain a video description, 1 audio description, or 1 caption description.outputGroups[0].outputs[1]
For MediaPackage endpoints using CMAF, outputs can only contain a video description, 1 audio description, or 1 caption description.outputGroups[0].outputs[2]
For MediaPackage endpoints using CMAF, outputs can only contain a video description, 1 audio description, or 1 caption description.outputGroups[0].outputs[3]
For MediaPackage endpoints using CMAF, outputs can only contain a video description, 1 audio description, or 1 caption description.
使用しようとしていたLive event - MediaPackage
のChannel templateですが、Output 1からOutput 4のそれぞれにVideoとAuidoが1つずつ含まれています。以下のような構成です。
- MediaPackage outputs
- Output 1: 1080p30
- video_1080p30
- audio_1
- Output 2: 720p30
- video_720p30
- audio_2
- Output 3: 480p30
- video_480p30
- audio_3
- Output 4: 240p30
- video_240p30
- audio_4
- Output 1: 1080p30
CMAF Ingestではこのような構成にはできません。OutputにはVideoもしくはAudioが1つのみ含まれているような構成にする必要があります。以下のイメージですね。
- MediaPackage outputs
- Output 1: 1080p30
- video_1080p30
- Output 2: 720p30
- video_720p30
- Output 3: 480p30
- video_480p30
- Output 4: 240p30
- video_240p30
- Output 5: audio_aac
- Audio 1: audio_aac
- Output 1: 1080p30
実際に上記の構成のように、Outputには1つのVideo/Audioを含めるかたちにOutput groupsを設定してChannelを作成する必要があります。このCMAF Ingestの制限について、詳細は以下ブログエントリなどもご参照ください。
次章では、上記ブログエントリでまとめたMediaLiveのChannel TemplateをMediaPacakge output groupsに変更してみます。
CMAF Ingest用Channel TemplateをMediaPackage destinationに変更する
Output group typeがMediaPackageとなっても、実際のdestinationがMediaPackage v2の場合にはCMAF Ingestの使用となり、その仕様からデフォルトのChannel Templateなどが使用できないことを確認しました。
私はMediaLiveとMediaPacakgeをCMFA Ingestで連携させる際、以下ブログエントリでまとめたCMAF Ingest output用のChannel Templateを活用しています。
実際には以下のChannel Templateとなります。(GitHub Gistで公開しているものです。)
medialive-cmaf-ingest-channel-template.json
以降ではこのChannel Templateについて、MediaPackage destinationのCMAF Ingest outputを使用したもの変更したものを作成してみたので、その概要と実際のChannel Templateファイルについて例示したいと思います。
といっても、基本的なChannel Templateの内容は先のブログエントリでまとめたものと同様です。具体的には、Workflow wizardで作成したChannelのVideo、AuidoのOutput設定を真似ながら新規にChannelを作成、そのChannelからcustom templateとしてダウンロードしました。
出力はVideoが2つ、Audioが1つという構成です。検証目的のため、あまり多くのレンディションにはしていません。
- MediaPackage outputs
- Output 1: video_1080p30
- Video: video_1080p30
- Output 2: video_720p30
- Video: video_720p30
- Output 3: audio_aac
- Audio 1: audio_aac
- Output 1: video_1080p30
MediaPackage outputsの項目で[Add output]ボタンを押下して2つのOutputを追加、合計3つのOutputとします。
ただ、デフォルトでOutputにはVideoとAudio 1が含まれています。Output 1とOutput 2はこのAudio 1が不要ですので[Remove audio 1]ボタンで削除し、Videoの設定のみ行います。対してOutput 3は[Remove video]ボタンでVideoを削除、Audioのみ設定を行います。
VideoはH.264コーデック、AudioはAACを使用しています。ビットレートなどの各種設定は先のブログエントリと同様、Workflow wizardで作成したChannelを参考にしたものです。Channelを作成後、custom templateとしてダウンロードし、Channel固有の情報を除いたものが以下となります。(こちらもGitHub Gistにて公開しています。)
medialive-cmaf-ingest-mediapackage-output-channel-template.json
まとめ
AWS Elemental MediaLiveのMediaPacakge output group typeで、新たにMediaPakcage v2のリソースがdestinationに指定できるようになったアップデートについてお届けしました。MediaPackage v2 Channel自体はHLSとCMAF Ingest両方のInput typeに対応していますが、MediaLiveでMediaPakcage v2リソースをdestinationに指定する場合は、CMAF Ingest outputを使用することになります。また、CMAF Ingest outputの場合は1つのOutputにVideo/Audio/Captionのいずれか1つのみしか含められない、というHLSとは異なる構成の仕様があります。そのため、マネジメントコンソールでデフォルトで用意されているChannel Templateなどが使用できません。CMAF IngestにあわせてOutputを構成する必要がある点に留意しておきましょう。